/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package modelo;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;
import javax.persistence.Table;
import javax.persistence.UniqueConstraint;

/**
 *
 * @author Elias Mendoza
 */
@Entity
@Table(name="amigo")
public class Amigo implements Serializable{
  @Id
  @GeneratedValue(strategy= GenerationType.IDENTITY)
  private int id;
  @Column(length=6,nullable=false,unique=true)
  private int folio;
  @Column(length=40,nullable=false)
  private String nombre;
  @Column(length=40,nullable=false)
  private String apellidos;
  @Column(length=15)
  private String telefono1;
  @Column(length=15)
  private String telefono2;
  @Column(nullable=false)
  private String direccion;
  
  @OneToMany(cascade= CascadeType.ALL,mappedBy="amigo")
  private List<Persona> personas= new ArrayList<Persona>();
  
  @ManyToMany()
  @JoinTable(name = "seccion_amigo", 
          joinColumns = { @JoinColumn(name = "amigo_id") },
          inverseJoinColumns = { @JoinColumn(name = "seccion_id") })
//  private List<Seccion> secciones =  new ArrayList<Seccion>();
private Set<Seccion> secciones = new HashSet<Seccion>();

  public Set<Seccion> getSecciones() {
    return secciones;
  }

  public void setSecciones(Set<Seccion> secciones) {
    this.secciones = secciones;
  }
  
  public void addSeccion(Seccion seccion){
    this.getSecciones().add(seccion);
    seccion.getAmigos().add(this);
  }
  
  
  @OneToOne()
  @JoinColumn(name="lider_id",referencedColumnName="id",nullable=false)
  private Lider lider;
  
  

  public Lider getLider() {
    return lider;
  }

  public void setLider(Lider lider) {
    this.lider = lider;
  }

//  public List<Seccion> getSecciones() {
//    return secciones;
//  }
//
//  public void setSecciones(List<Seccion> secciones) {
//    this.secciones = secciones;
//  }
  
//  public  void addSeccion(Seccion seccion) {
//    this.getSecciones().add(seccion);
//    seccion.getAmigos().add(this);
//  }
  
  

  public int getFolio() {
    return folio;
  }

  public void setFolio(int folio) {
    this.folio = folio;
  }

  public List<Persona> getPersonas() {
    return personas;
  }

  public void setPersonas(List<Persona> personas) {
    this.personas = personas;
  }
  
  public String getApellidos() {
    return apellidos;
  }

  public void setApellidos(String apellidos) {
    this.apellidos = apellidos;
  }

  public String getDireccion() {
    return direccion;
  }

  public void setDireccion(String direccion) {
    this.direccion = direccion;
  }

  public int getId() {
    return id;
  }

  public void setId(int id) {
    this.id = id;
  }

  public String getNombre() {
    return nombre;
  }

  public void setNombre(String nombre) {
    this.nombre = nombre;
  }

  public int getNumeroAmigo() {
    return folio;
  }

  public void setNumeroAmigo(int numeroAmigo) {
    this.folio = numeroAmigo;
  }

  public String getTelefono1() {
    return telefono1;
  }

  public void setTelefono1(String telefono1) {
    this.telefono1 = telefono1;
  }

  public String getTelefono2() {
    return telefono2;
  }

  public void setTelefono2(String telefono2) {
    this.telefono2 = telefono2;
  }

  @Override
  public boolean equals(Object obj) {
    if (obj == null) {
      return false;
    }
    if (getClass() != obj.getClass()) {
      return false;
    }
    final Amigo other = (Amigo) obj;
    if (this.id != other.id) {
      return false;
    }
    return true;
  }

  @Override
  public int hashCode() {
    int hash = 7;
    hash = 97 * hash + this.id;
    return hash;
  }

  @Override
  public String toString() {
    return folio + "-" + nombre ;
  }
  
  
}
